package com.cskaoyan.javase.array._5operation._2reverse;

import java.util.Arrays;

/**
 * 数组的逆序,逆置,指的是数组中首尾元素交互
 * 分析:
 *      数组的逆置首先无需创建新数组,只需要在原先的数组中操作即可
 *      其次数组元素逆置的核心是元素的交换:
 *          交换元素需要临时工(temp)
 *          对于数组arr,元素交换的下标是:
 *              0 <---> arr.length - 1
 *              1 <---> arr.length - 1 - 1
 *              ...
 *              i <---> arr.length - 1 - i
 *
 *
 * @since 14:41
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println("逆置之前:" + Arrays.toString(arr));
        reverse(arr);
        System.out.println("逆置之后:" + Arrays.toString(arr));
    }

    public static void reverse(int[] target) {
        // 遍历交换元素,这时要注意仅遍历一半数组即可,否者会交换两次,相当于没有交换
        for (int i = 0; i < target.length / 2; i++) {
            // 交换元素,核心的代码是 i <---> arr.length - 1 - i
            int temp = target[i];
            target[i] = target[target.length - 1 - i];
            target[target.length - 1 - i] = temp;
        }
    }
}
